package xyz.zyt123.hikvideo.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import xyz.zyt123.hikvideo.config.VideoConfig;
import xyz.zyt123.hikvideo.controller.DeviceController;
import xyz.zyt123.hikvideo.controller.VideoController;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;

/**
 * @author wuguodong
 * @Title TimerUtil.java
 * @description 定时任务
 * @time 2019年12月16日 下午3:10:08
 **/
@Component
public class TimerUtil implements CommandLineRunner {

  @Autowired
  private VideoConfig config;// 配置文件bean

  public static Timer timer;

  @Override
  public void run(String... args) throws Exception {
    // 超过5分钟，结束推流
    timer = new Timer("timeTimer");
    timer.schedule(new TimerTask() {
      @Override
      public void run() {
        System.err.println("开始执行定时任务...");
        // 管理缓存
        if (null != CacheUtil.STREAMMAP && !CacheUtil.STREAMMAP.isEmpty()) {
          Set<Integer> keys = CacheUtil.STREAMMAP.keySet();
          for (Integer key : keys) {
            try {
              // 最后打开时间
              long openTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                  .parse(CacheUtil.STREAMMAP.get(key).getOpenTime()).getTime();
              // 当前系统时间
              long newTime = new Date().getTime();
              // 如果超过保活时间，则关闭推流
              if ((newTime - openTime) / 1000 / 60 > config.getKeepalive()) {
                DeviceController.jobMap.get(key).setInterrupted();
                DeviceController.jobMap.remove(key);
                CacheUtil.STREAMMAP.remove(key);
                System.err.println("[定时任务]  关闭" + key + "摄像头...");
              }
            } catch (ParseException e) {
              e.printStackTrace();
            }
          }
        }
        System.err.println("定时任务执行完毕...");
      }
    }, 1, 1000 * 60);
  }
}
